def call(Map map) {

    pipeline {
        agent {
            label map.RUN_NODE
        }
        environment {
            SERVICE_NAME = "${map.SERVICE_NAME}"
            GIT_URL = "${map.GIT_URL}"
            HOSTS = "${map.HOSTS}"
            TAG_FILE = "${map.TAG_FILE}"
            // 默认标签为空，后面会根据 Git 仓库动态填充
            VERSION_TAG = ''
        }
        options {
            timeout(time: 8, unit: 'HOURS')
            disableConcurrentBuilds()
            timestamps()
            skipDefaultCheckout()
            buildDiscarder logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '30', numToKeepStr: '300')
        }
        parameters {
            string(name: 'BRANCH', defaultValue: map.DEFAULT_BRANCH ?: 'main', description: '请输入将要构建的代码分支')
            
            // choice(name: 'TAG', choices: ['示例v1.0.0'], description: '选择 Git 标签')
            extendedChoice(description: '选择 Git 标签', multiSelectDelimiter: ',', name: 'ROLLBACK_VERSION', propertyFile: map.VERSION_FILE, propertyKey: map.VERSION_KEY, quoteValue: false, saveJSONParameterToFile: false, type: 'PT_SINGLE_SELECT', visibleItemCount: 10)
            
            // 使用 split 函数将 HOSTS 列表从字符串转换为数组
            choice(name: 'REMOTE_HOST', choices: map.HOSTS, description: '选择要发布的主机,默认为ALL') // 定义项目对应的主机列表
            
            choice(name: 'MODE', choices: ['DEPLOY', 'ROLLBACK'], description: '请选择发布或者回滚？')
        }
        stages {
            stage('测试传入的环境变量') {
                steps {
                    script {
                        sh """
                            echo "SERVICE_NAME: ${env.SERVICE_NAME}"
                            echo "GIT_URL: ${env.GIT_URL}"
                            echo "HOSTS: ${env.HOSTS}"
                        """
                        // 确保拉取最新的 Git 标签
                        sh 'git fetch --tags'
                        def tags = sh(script: 'git for-each-ref --sort=-creatordate refs/tags | head -n 10 | awk -F"/" \'{print \$3}\'', returnStdout: true).trim()
                        def tagList = tags.split("\n")
                        echo "最新的标签是：${tagList}"
                        // 如果没有选择标签，默认使用最新的标签
                        if (tagList.size() > 0) {
                            // 动态更新 TAG 参数的选择项（最新标签会在构建时显示）
                            env.VERSION_TAG = tagList[0]
                        }
                        echo "最新的标签是：${env.VERSION_TAG}"
                        // 更新构建参数 TAG 的选择项
                        currentBuild.rawBuild.addAction(new ParametersAction(new StringParameterValue("TAG", env.VERSION_TAG)))
                    }
                }
            }
            
            // stage('获取 Git 标签') {
            //     steps {
            //         script {
            //             // 确保拉取所有远程标签
            //             sh 'git fetch --tags'
                        
            //             def tags = sh(script: 'git for-each-ref --sort=-creatordate refs/tags | head -n 10 | awk -F"/" \'{print \$3}\'', returnStdout: true).trim()
                       
                        
            //             // 将标签保存到 'git-tags.txt' 文件
            //             writeFile file: 'git-tags.txt', text: tags
                        
            //             // 打印获取的标签列表（调试用）
            //             echo "最新的 10 个标签："
            //             echo tags
            //         }
            //     }
            // }
        }
    }
}
